package com.baaio.conn;

import java.util.ArrayList;
/**
 * 
 * 先得到实例。在得到事务类createTransaction；<br>
 * createTransaction方法可以调用多次。<br>
 * 不能够跨类使用。否则会报错。多个类同时事务请参考TransactionGlobalFactory；<br>
 * 最后执行invoke方法。
 *
 */

public class TransactionFactory
{
    private ArrayList<Transaction> list = new ArrayList<Transaction>();
    
    private TransactionFactory()
    {
    }
    /**
     * 获得工厂类的实例
     * @return TransactionFactory
     */
    public static TransactionFactory getInstance()
    {
        
            return new TransactionFactory();
        
    }
    
    /**
     * 获得Transaction的实例
     * @return Transaction
     */
    public Transaction createTransaction()
    {
         Transaction t = new Transaction();
        list.add(t);
        return t;
    }
    
    /**
     * 获得Transaction的实例
     * @param DBName 其它数据库名称
     * @return
     */
    public Transaction createTransaction(String DBName)
    {
         Transaction t2 = new Transaction(DBName);
        list.add(t2);
        return t2;
    }
    
    /**
     * 执行事务
     * 
     */
    public void invoke()
    {
        boolean f = true;
        for(Transaction ts : list)
        {
            f = ts.invokeAll();
            if(!f)
            {
                GetStatement.dbTClose();
                break;
            }
        }
        if(f)
        {
            for(Transaction ts : list)
            {
                ts.invoke();
            }
            GetStatement.dbTClose();
        }
    }

}
